/*
 * C Callback
 * Mark.Zhang 2016.9.20
 * 
 * */

package com.COE.MdmSdkLib;


public interface SdkLibListener {


	// 目前不同的设备的解析器需要Java层代码记录。
	// 根据handler，去判断返回的son文本，应该走哪个解析器。
	// 后续做到由底层管理
	// 上层代码只要填空，框架的本质含义。
	public void OnReceiveCmd(
			int handler,/**/
			int task_no, /**/
			String json /**/
			);
	public void OnReceiveCmdResult(
			int handler,/**/
			int task_no,/**/
			int result/**/
			);
	public void OnReceiveNotify(
			int handler,/**/
			String json/**/
			);
	
	public static final int SDK_DEBUG_INFO =	1;
	public static final int SDK_DEBUG_KEYINFO =	2;
	public static final int SDK_DEBUG_WARNING =3;
	public static final int SDK_DEBUG_ERROR	 =  4;
	public static final int SDK_DEBUG_LEVEL =  SDK_DEBUG_INFO;
	public void OnLogFunc(
			int level, /**/
			String module, /**/
			int line, /**/
			String message /**/
			);
	/**
	* 登录完成的通知，errcode为0表示登录成功，其余请参考全局的错误码表
	*/
	public void OnLoginComplete(int errcode);
	/**
	* 在线状态变化通知， 状态（status）取值为 11 表示 在线， 取值为 21 表示  离线
	* old是前一个状态，new是变化后的状态（当前）
	*/
	public void OnOnlineStatus(int old, int new_status);
	public String AutoSendStatus(); 
	/**/
	 // 要求Java层实现的，一个自动记录采集。给一个Object给内部。
	 // 下面这个就是 AutoSendRecord 函数的返回值
//	public static class AUTO_SEND_RECORD_DATA
//	{
//		String json;
//		 // 记录类型。用户数据的话，服务器会根据监控Topic转发到服务器。
//		int record_type; // 1, 最终用户数据；2,厂商数据；3,两者均是
//		// 质量保证。
//		byte qos;
//		// 优先级，优先级高的，服务器会优先派送。
//		byte priority;
//	};
	
	// 库里直接同步回调这个函数。因此应用层上不能做太多的运算。
	public AUTO_SEND_RECORD_DATA AutoSendRecord(
			int handler/**/
			);
	
	// im部分
	// 单聊接收消息
	// 根据CMD，在这里回调Java，把pb包传给Java
	public void OnBaseImProcessNotity(
			int cmd,
			byte[] sender_imid,
			byte[] target_imid,
			byte[] pb,
			int len
			);

	//群聊接收消息
	public void OnBaseImProcessNotifyByGroup(
			int cmd,
			byte[] sender_imid,
			byte[] group_id,
			byte[] pb,
			int len
	);

	//通知接收消息
    public void OnBaseImProcessNotifyByNotice(
            int cmd,
            byte[] sender_imid,
            byte[] target_imid,
            byte[] pb,
            int len
    );
    //公众号接收消息
    public void OnBaseImProcessNotifyByPublicAcc(
            int cmd,
            byte[] sender_imid,
            byte[] target_imid,
            byte[] pb,
            int len
    );

    //同步消息
    public void OnBaseImProcessNotifyBySync(
            int cmd,
            byte[] sender_imid,
            byte[] target_imid,
            byte[] pb,
            int len
    );
	// 当sdk出现异常时, 回调安卓
	public void OnImErrorNotify(int val);

	// sdk进行init的回调通知
	public void OnSdkInitResultNotify(int val);
}
